#include<iostream>
#include<string.h>
#include <stdlib.h>
#include<unistd.h> 
#include <sys/wait.h>
using namespace std;
extern char**environ;
int main(int argc,char*argv[],char*envp[])
{
    // if(argc==2)
    // {
    //     if(!strcmp((argv[1]),"-1"))
    //     {
    //         cout<<"function1"<<endl;
    //     }
    //      if(!strcmp((argv[1]),"-2"))
    //     {
    //         cout<<"function2"<<endl;
    //     }
    // }
    //cout<<getenv("PWD")<<endl;
    // for(int i=0;environ[i]!=NULL;i++)
    // {
    //     cout<<environ[i]<<endl;
    // }
    // for(int i=0;i<100;i++)
    // {
    //     cout<<strerror(i)<<endl;
    // }
    pid_t id=fork();
    if(id==0)
    {
        //int n=3;
        //子进程
        // while(n--)
        // {
        //     // cout<<"pid"<<getpid()<<endl;
        //     // cout<<"子进程n"<<"="<<n<<endl;
        //     // sleep(1);

        // }
        // exit(1);
        //execl("./other/1.exe","./other/1.exe",NULL);
        //execl("/usr/bin/ls","ls","-l",NULL);
        //execlp("1.exe","1.exe",NULL);
        const char *const envp[]={"xyx", "roronoya",NULL};
        execle("./1.exe","1.exe",NULL,envp);
        return 0;
    }
    //父进程
    // int status;
    // pid_t ret=waitpid(id,&status,WNOHANG);
    // cout<<"父亲非阻塞不等待子进程了"<<endl;
    // cout<<"ret="<<ret<<" "<<"status="<<status<<endl;
    // // int signal;//退出信号0x7f
    // // int code;//退出码
    // // cout<<"signal"<<(status&0x7f)<<"code"<<((status>>8)&0xff)<<endl;
    // if(WIFEXITED(status))
    // {
    //     cout<<"code: "<<WEXITSTATUS(status)<<endl;
    // }
    
    while(1)
    {
        int status;
        pid_t ret=waitpid(id,&status,WNOHANG);
        if(!ret)
    {
        cout<<"子进程还未退出"<<endl;
        sleep(1);
    }
    else if(ret)
    {
        cout<<"子进程："<<ret<<" "<<"status: "<<WEXITSTATUS(status)<<endl;
        break;
    }
    else
    {
        cout<<"404"<<endl;
    }
    }
    return 0;
}